model
在本系列文章中,代表 ActiveRecord 自動產生的 model
schema
代表 DB 中的 table 和 column
aggregate
在 Domain-Driven Design 中代表一個領域中的一組物件,通常會對應到真實世界的一個物體或實物,甚至是抽象的概念,由數個 entities 和 value objects 所組成
entity
一個擁有 identity 的物件
這邊的 identity 指可識別這個物件的屬性,不一定專指 id,也有可能是多個屬性所組成,重點是一定要為 unique
value object
一個擁有多種屬性的物件,不具有可以識別的屬性
更多關於 entity、value object 和 aggregate 的知識可以看這系列文章
現在大致將原本的一個大系統區分成了多個子系統,我們的下一步是開始嘗試將 Domain-Driven Design 的戰術設計導入到 legacy code 中。
因為對領域有了更多的認識,我們發現舊的 Model 設計已經與真實世界的需求分道揚鑣,所以需要重新設計 aggregate ,而修改舊有 schema 的成本又太高,因此我們採用了 Anti-Corruption Layer (簡稱 ACL) 的方式來切割舊債。
我們開了一個新資料夾叫 domains,並在底下開立各 domain 的資料夾:
# config/application.rb
class Application < Rails::Application
config.eager_load_paths += Dir['domains']
end
那至於 domain 資料夾裡會有那些東西呢,靜待下回揭曉!